/**
 * 
 */
package design_pattern.memento.blackbox;

/**
 * 提供者
 * 
 * @author linzq
 * 
 */
public class Originator {

  private String state;

  /**
   * 工厂方法返回一个新的备忘录对象
   * 
   * @return
   */
  public MementoIF createMemento() {
    return new Memento(state);
  }

  public void restoreMemento(MementoIF m) {
    this.state = ((Memento) m).getState();
  }

  public String getState() {
    return state;
  }

  public void setState(String state) {
    this.state = state;
    System.out.println("Current state = " + state);
  }

  /**
   * 备忘录对象对于提供者是全部可见的，而对于外部对象却只能使用MementoIF接口来访问该对象。 从而做到双向接口的作用。
   * 
   * @author linzq
   * 
   */
  class Memento implements MementoIF {

    private String state;

    /**
     * 声明为私有的方法，使得只有自己对象和Originator的对象才可以访问。
     * 
     * @param state
     */
    private Memento(String state) {
      this.state = state;
    }

    private String getState() {
      return state;
    }

    private void setState(String state) {
      this.state = state;
    }

  }

}
